﻿using System;
using System.Data;
using MySql.Data.MySqlClient;
using Mx.Ipn.Escom.TT20080015.Modelo.DB;
using Mx.Ipn.Escom.TT20080015.Modelo.Datos;

namespace Mx.Ipn.Escom.TT20080015.Modelo.DB
{
    /// <summary>
    /// La clase UsuarioManager contiene métodos que permiten la gestión con la tabla "usuario" de la base de datos.
    /// </summary>
    public class UsuarioManager : ConexionMySql
    {
        /// <summary>
        /// Este método realiza la consulta a la base de datos del usuario.
        /// </summary>
        /// <param name="usuario">Es una cadena con el nombre de usuario</param>
        /// <param name="clave">Es la cadena que el usuario introduce como clave de acceso</param>
        /// <returns>Un objeto Usuario</returns>
        public static Usuario Consultar(string usuario, string clave)
        {
            Usuario user = null;
            MySqlCommand command = getcommand();

            command.CommandText = "CALL login(?usuario, ?clave)";
            command.Parameters.Add("?usuario", usuario);
            command.Parameters.Add("?clave", clave);
            try
            {
                command.Connection.Open();
                MySqlDataReader rd = command.ExecuteReader();
                if (rd.Read())
                    user = new Usuario(rd.GetInt32(0),rd.GetString(1),
                        rd.GetString(2),rd.GetString(3),rd.GetString(4),
                        rd.GetString(5),rd.GetString(6),rd.GetString(7));
            }
            finally
            {
                command.Connection.Close();
            }

            return user;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static Usuario Consultar(int id)
        {
            Usuario usuario;
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_especialista_por_id(?value)";
            command.Parameters.Add("?value", id);

            command.Connection.Open();
            MySqlDataReader rd = command.ExecuteReader();
            if (rd.Read())
            {
                usuario = new Usuario(id, rd.GetString(1), rd.GetString(2),
                    rd.GetString(3), rd.GetString(4), rd.GetString(5), rd.GetString(6),
                    rd.GetString(7));
            }
            else
                usuario = new Usuario();
            command.Connection.Close();

            return usuario;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombre"></param>
        /// <param name="perfil"></param>
        /// <returns></returns>
        public static DataSet ObtenerUsuarios(string nombre, string perfil)
        {
            MySqlCommand command = getcommand();

            command.CommandText = "CALL consultar_usuarios(?nombre,?perfil)";
            command.Parameters.Add("?nombre", nombre);
            command.Parameters.Add("?perfil", perfil);

            command.Connection.Open();
            command.Prepare();
            command.ExecuteScalar();
            command.Connection.Close();


            MySqlDataAdapter da = new MySqlDataAdapter(command);
            DataSet ds = new DataSet();
            da.Fill(ds, "usuario");

            return ds;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="usuario"></param>
        public static void Registrar(Usuario usuario)
        {
            MySqlCommand command = getcommand();
            command.CommandText = "CALL registrar_usuario" + usuario.ToString();

            try
            {
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
            /*catch(Exception ex)
            {
                throw ex;
            }*/
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="usuario"></param>
        public static void Actualizar(Usuario usuario)
        {
            MySqlCommand command = getcommand();
            command.CommandText = "CALL modificar_usuario" + usuario.ToString();

            try
            {
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
            catch(Exception ex)
            {
                throw ex;
            }
            finally
            {
                command.Connection.Close();
            }
        }

        /// <summary>
        /// Elimina 
        /// </summary>
        /// <param name="id"> </param>
        public static void Eliminar(string id)
        {
            MySqlCommand command = getcommand();
            command.CommandText = "CALL eliminar_usuario(?value)";
            command.Parameters.Add("?value", id);

            try
            {
                command.Connection.Open();
                command.Prepare();
                command.ExecuteScalar();
            }
            finally
            {
                command.Connection.Close();
            }
        }
    }
}
